/*
 * Яндекс.Карты для полей
 */
var Map = 
{

map:null,
placemark:null,
params:null,

showPlayfieldMap:function(params)
{
	document.getElementById(params.idMaps).innerHTML = '';
	var map = new YMaps.Map(document.getElementById(params.idMaps));
	map.setCenter(new YMaps.GeoPoint(params.coordX,params.coordY), 14);
	map.addControl(new YMaps.TypeControl());
	map.addControl(new YMaps.ToolBar());
	map.addControl(new YMaps.Zoom());
	map.addControl(new YMaps.ScaleLine());
	var placemark = new YMaps.Placemark(new YMaps.GeoPoint(params.coordX,params.coordY), {style:"default#stadiumIcon", hideIcon: false});
	map.addOverlay(placemark);
	placemark.description = params.address;
},

getAddress:function(Data,Path)
{
	var s='';var val='';
	if(typeof(Path)=='undefined'){Path=[];}
	if(typeof(Data)=='object'){
		for(var i in Data){
			if ( i=='CountryName' || i=='CountryNameCode' || i=='LocalityName' || i=='AdministrativeAreaName' ) continue;
			Path.push(i);
			val=this.getAddress(Data[i],Path);
			if(val!==null){s=(s?s+', ':'')+val;}
			Path.pop();
		}
		return s;
	}else{
		val=Data;
		return val;
	}
},

dragPoint:function(el)
{
	var geocoder = new YMaps.Geocoder(City.getCityValue(el));
	YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
		if (this.length()) {
			Map.map.setCenter(this.get(0).getGeoPoint());
		}
	});
},

openBalloon:function(obj)
{
	var geocoder = new YMaps.Geocoder(obj.getGeoPoint().copy(), {results: 1});
	YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
		if (this.length()) {
			var address = Map.getAddress(this.get(0).AddressDetails);
			document.getElementById(Map.params.idAddress).value = address;
			Map.placemark.description = address;
			Map.placemark.openBalloon();
		}
	});
	document.getElementById(Map.params.idCoords).value = obj.getGeoPoint().copy();
	obj.update();
},

closeBalloon:function(obj)
{
	Map.placemark.closeBalloon();
	obj.update();
},

init:function(params)
{
	this.params = params;
	this.map = new YMaps.Map(document.getElementById(this.params.idMaps));
	this.map.setCenter(new YMaps.GeoPoint(this.params.defaultCoordX,this.params.defaultCoordY), 11); // переопределить координаты центра
	this.map.addControl(new YMaps.TypeControl());
	this.map.addControl(new YMaps.ToolBar([new YMaps.ToolBar.MoveButton(), new YMaps.ToolBar.MagnifierButton()]));
	this.map.addControl(new YMaps.Zoom());

	// Привязываем событие на установку метки (адрес + координаты)
	YMaps.Events.observe(this.map, this.map.Events.Click, function (map, mEvent) {
		// Удаляем метку, если она уже есть
		if ( Map.placemark != null ){
			Map.map.removeOverlay(Map.placemark);
		}

		// Создаем и добавляем красную метку на карту
		Map.placemark = new YMaps.Placemark(mEvent.getGeoPoint(), {draggable:true, style:"default#redPoint", hideIcon: false});
		Map.map.addOverlay(Map.placemark);

		// Вешаем обработчики событий
		YMaps.Events.observe(Map.placemark, Map.placemark.Events.DragEnd, Map.openBalloon);
		YMaps.Events.observe(Map.placemark, Map.placemark.Events.MouseEnter, Map.closeBalloon);
		YMaps.Events.observe(Map.placemark, Map.placemark.Events.DragStart, Map.closeBalloon);

		// Вызываем событие сразу
		YMaps.Events.notify(Map.placemark, Map.placemark.Events.DragEnd, Map.placemark);
	});

	if ( this.params.playfields.length ){
		var placemark = [];
		for ( var i=0; i<this.params.playfields.length; i++ ){
			placemark[this.params.playfields[i].id] = new YMaps.Placemark(new YMaps.GeoPoint(this.params.playfields[i].coordX,this.params.playfields[i].coordY), {style:"default#stadiumIcon", hideIcon: false});
			placemark[this.params.playfields[i].id].description = this.params.playfields[i].address;
			this.map.addOverlay(placemark[this.params.playfields[i].id]);
		}
	}
}

} // Map